10819 - Trouble of 13-Dots (DP, programación dinámica, Knapsack 0/1) && 820 - Interne...
[andmenj-acm.git] / 11203 - Can you decide it for ME / problem11203.~dpr
blob9a25c44a57410c0aa5044da63328b8aab7ca17fa
1 program problem11203 (input, output);\r
2 \r
3 {$APPTYPE CONSOLE}\r
4 \r
5 \r
6 Function StrToInt(Const S: String): Integer;\r
7 Var\r
8   E: Integer;\r
9 Begin\r
10   Val(S, Result, E);\r
11 End;\r
14 function formadaPor(s : string; c : char) : boolean;\r
15 var\r
16   i : integer;\r
17 begin\r
18 result := true;\r
19 for i := 1 to length(s) do\r
20   begin\r
21   if s[i] <> c then\r
22     begin\r
23     result := false;\r
24     exit;\r
25     end;\r
26   end;\r
27 end;\r
29 function isAxiom(x, y, z : string) : boolean; overload;\r
30 begin\r
31 result := true;\r
32 if (length(x) + 1) <> (length(z)) then\r
33   result := false;\r
35 end;\r
37 function isTheorem(s : string) : boolean;\r
38 var\r
39   x, y, z : string;\r
40   i : integer;\r
41 begin\r
42 i := 1;\r
43 x := '';\r
44 while ((s[i] <> 'M') and (i <= length(s))) do\r
45   begin\r
46   x := x + s[i];\r
47   inc(i);\r
48   end;\r
50 if (x = '') or (not formadaPor(x, '?')) then\r
51   begin\r
52   result := false;\r
53   exit;\r
54   end;\r
56 s := copy(s, i, length(s)); //delete from the beggining until the character before the first M\r
57 if s[1] <> 'M' then\r
58   begin\r
59   result := false;\r
60   exit;\r
61   end;\r
63 s := copy(s, 2, length(s)); //delete the M\r
64 i := 1;\r
65 y := '';\r
66 while ((s[i] <> 'E') and (i <= length(s))) do\r
67   begin\r
68   y := y + s[i];\r
69   inc(i);\r
70   end;\r
72 if (y = '') or (not formadaPor(y, '?')) then\r
73   begin\r
74   result := false;\r
75   exit;\r
76   end;\r
78 s := copy(s, i, length(s)); //delete from the beggining until the character before the first E\r
79 if s[1] <> 'E' then\r
80   begin\r
81   result := false;\r
82   exit;\r
83   end;\r
85 z := copy(s, 2, length(s)); //delete the E\r
86 if not formadaPor(z, '?') then\r
87   begin\r
88   result := false;\r
89   exit;\r
90   end;\r
93 if length(y) = 1 then\r
94   result := isAxiom(x, y, z)\r
95 else\r
96   begin\r
97   y := copy(y, 1, length(y) - 1); //borra el ultimo\r
98   z := copy(z, 1, length(z) - 1);\r
99   result := isTheorem(x+'M'+y+'E'+z);\r
100   end;\r
101 end;\r
103 var\r
104   cuantos : integer;\r
105   i, j, principalLoop : integer;\r
106   entrada : String;\r
107   letrasCorrectas : Set of char;\r
108   invalid : boolean;\r
110 begin\r
111 //reset(input, 'input.txt');\r
112 //reset(output, 'out.txt');\r
114 letrasCorrectas := ['M', 'E', '?'];\r
115 readLn(entrada);\r
116 cuantos := strToInt(entrada);\r
118 for principalLoop := 1 to cuantos do\r
119   begin\r
120   invalid := false;\r
121   readLn(entrada);\r
122   j := length(entrada);\r
123   for i := 1 to j do\r
124       if not (entrada[i] in letrasCorrectas) then\r
125       begin\r
126         invalid := true;\r
127         break;\r
128       end;\r
129   if invalid then\r
130     writeLn('no-theorem')\r
131   else\r
132     begin\r
133     if isTheorem(entrada) then\r
134       writeLn('theorem')\r
135     else\r
136       writeLn('no-theorem');\r
137     end;\r
138   end;\r
140 end.\r